Web.Config do .NET 4.0

08/26/2009 08:39:00 By Felipe Pessoto

Uma boa novidade pra quem trabalha com Web, no ASP.NET 4.0 o web.config segue o caminho inverso da versão 3.5 e reduz de tamanho, na verdade quase reduzido a zero.

Na versão 3.0/3.5 ele cresceu bastante pois usavam  a mesma CLR e machine.config do 2.0, então os recursos novos tinham que ser registrados no web.config.

Agora com a versão 4.0, que vai ter sua própria machine.config, todas essas extensões, inclusive as do 4.0, serão registradas no próprio machine.config, reduzindo o web.config a isto:

Uma linha pra definir se esá rodando em debug e a versão do framework usada, e outra pra definir se é pra usar o modo integrado com o IIS7.

LINQ to SQL - Novidades no .NET 4.0

06/10/2009 12:49:00 By Felipe Pessoto

Já temos informações sobre as novidades que estarão no Linq to SQL do .Net 4.0:

Performance

  • Query plans are reused more often by specifically defining text parameter lengths
  • Identity cache lookups for primary key with single result now includes query.Where(predicate).Single/SingleOrDefault/First/FirstOrDefault
  • Reduced query execution overhead when DataLoadOptions specified (cache lookup considers DataLoadOptions value equivalency – post beta 1)

Usability

  • ITable<T> interface for additional mocking possibilities
  • Contains with enums automatically casts to int or string depending on column type
  • Associations can now specify non-primary-key columns on the other end of the association for updates
  • Support list initialization syntax for queries
  • LinqDataSource now supports inherited entities
  • LinqDataSource support for ASP.NET query extenders added

Query stability

  • Contains now detects self-referencing IQueryable and doesn't cause a stack overflow
  • Skip(0) no longer prevents eager loading
  • GetCommand operates within SQL Compact transactions
  • Exposing Link<T> on a property/field is detected and reported correctly
  • Compiled queries now correctly detect a change in mapping source and throw
  • String.StartsWith, EndsWith and Contains now correctly handles ~ in the search string
  • Now detects multiple active result sets (MARS) better
  • Associations are properly created between entities when using eager loading with Table-Valued Functions (TVFs)
  • Queries that contain sub-queries with scalar projections now work better 

Update stability

  • SubmitChanges no longer silently consumes transaction rollback exceptions
  • SubmitChanges deals with timestamps in a change conflict scenario properly
  • IsDbGenerated now honors renamed properties that don't match underlying column name
  • Server-generated columns and SQL replication/triggers now work instead of throwing SQL exception

General stability

  • Binary types equate correctly after deserialization
  • EntitySet.ListChanged fired when adding items to an unloaded entity set
  • Dispose our connections upon context disposal (ones passed in are untouched)

SQL Metal

  • Foreign key property setter now checks all affected associations not just the first
  • Improved error handling when primary key type not supported
  • Now skips stored procedures containing table-valued parameters instead of aborting process
  • Can now be used against connections that use AttachDbFilename syntax
  • No longer crashes when unexpected data types are encountered

LINQ to SQL class designer

  • Now handles a single anonymously named column in SQL result set
  • Improved error message for associations to nullable unique columns
  • No longer fails when using clauses are added to the partial user class
  • VarChar(1) now correctly maps to string and not char
  • Decimal precision and scale are now emitted correctly in the DbType attributes for stored procedures
  • Foreign key changes will be picked up when bringing tables back into the designer without a restart 

Code generation (SQL Metal + LINQ to SQL class designer)

  • Stored procedures using original values now compiles when the entity and context namespaces differ
  • Virtual internal now generates correct syntax
  • Mapping attributes are now fully qualified to prevent conflicts with user types
  • KnownTypeAttributes are now emitted for DataContractSerializer with inheritance
  • Delay-loaded foreign keys now have the correct, compilable, code generated
  • Using stored procedures with concurrency no longer gets confused if entities in different namespace to context
  • ForeignKeyReferenceAlreadyHasValueException is now thrown if any association is loaded not just the first

 

Potentially breaking changes


We worked very hard to avoid breaking changes but of course any potential bug fix is a breaking change if your application was depending on the wrong behavior. The ones I specifically want to call out are:

Skip(0) is no longer a no-op


The special-casing of 0 for Skip to be a no-op was causing some subtle issues such as eager loading to fail and we took the decision to stop special casing this. This means if you had syntax that was invalid for a Skip greater than 0 it will now also be invalid for skip with a 0. This makes more sense and means your app would break on the first page now instead of subtlety breaking on the second page. Fail fast :)

ForeignKeyReferenceAlreadyHasValue exception


If you are getting this exception where you weren’t previously it means you have an underlying foreign key with multiple associations based on it and you are trying to change the underlying foreign key even though we have associations loaded.Best thing to do here is to set the associations themselves and if you can’t do that make sure they aren’t loaded when you want to set the foreign key to avoid inconsistencies.

 

Fonte: http://damieng.com/blog/2009/06/01/linq-to-sql-changes-in-net-40

CLR 4.0 Debugging

05/26/2009 20:14:00 By Felipe Pessoto

Além de todas as novidades que veremos no .Net 4/C# 4(dynamic, variância de generics, etc) a nova CLR4.0 permitirá dump debugging para código gerenciado. Dump seria algo como despejo, no nosso caso despejo de memória. O termo é comum em muitas ferramente de diagnóstico.



Assim quando um programa travar, você pode abrir o arquivo dump(figura 2) e ver o estado do programa na hora do crash(figura 3). É como se você estivesse debugando o programa, com algumas limitações, a primeira e óbvia é que você não pode continuar a execução do programa, outra que tinhamos no CTP e foi resolvida no Beta é o acesso a propriedades e métodos, já não temos um processo rodando pra executá-los.





Para executar os métodos e propriedades o VS2010 interpreta o código IL e executa o código virtualmente. Na janela Immediate Window(figura 4) você pode ver as chamadas que fiz, usando o arquivo dump, as chamadas virtuais são marcadas com um asterisco(*). E se tentar continuar a execução do programa, irá receber a mensagem de que não é possível:

Visual Studio 2010 Beta 1 disponível para o público

05/20/2009 22:15:00 By Felipe Pessoto

Está disponível para download o Visual Studio 2010. Foram liberadas as versões Professional e Team System em formato ISO ou Web Installer, que baixa apenas os componentes necessários. O .Net 4 Beta 1 também está disponível, assim como o Foundation Server 2010 Beta 1.

Visual Studio 2010 Professional Beta 1 (Web Installer)
Visual Studio 2010 Professional Beta 1 (ISO)
Visual Studio Team System 2010 Beta 1 (Web Installer)
Visual Studio Team System 2010 Beta 1 (ISO)
Visual Studio Team Foundation Server 2010 Beta 1
.NET Framework 4.0 Beta 1